﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using acessaDB;
using Frame;
using System.Data;
using System.Configuration;
using System.Data.SqlClient;
using Estrutura;


namespace Banco
{

    /// <summary>
    /// Summary description for BD_Usuario
    /// </summary>
    public class BD_Usuario
    {
        #region variaveis_globais

        acessaDB.conectaDBMSSQLServer sqlServer = new conectaDBMSSQLServer();
        string conectionString = System.Configuration.ConfigurationManager.AppSettings["SQLServerConnectionLocal"];
        string usuario = string.Empty;

        #endregion

        #region construtor

        public BD_Usuario()
        {
            if (System.Configuration.ConfigurationManager.AppSettings["ambiente"] == "PROD")
                conectionString = System.Configuration.ConfigurationManager.AppSettings["SQLServerConnectionProd"];
        }
        public BD_Usuario(string usu_Login)
        {
            if (System.Configuration.ConfigurationManager.AppSettings["ambiente"] == "PROD")
                conectionString = System.Configuration.ConfigurationManager.AppSettings["SQLServerConnectionProd"];
            usuario = usu_Login;
        }

        #endregion

        #region metodos

        public System.Data.DataSet _retorna_Usuario(
                                                string USUARIO_ID,
                                                string USU_NOME,
                                                string USU_LOGIN,
                                                string USU_DTINCULSAO,
                                                string SOLICITANTE_ID,
                                                string USU_PASS,
                                                string USU_ALTERASENHA,
                                                string USU_EMAIL,
                                                string USU_STEXCLUIDO
                                                )
        {

            if (string.IsNullOrEmpty(USUARIO_ID)) USUARIO_ID= "''";
            if (string.IsNullOrEmpty(USU_NOME)) USU_NOME= "''";
            if (string.IsNullOrEmpty(USU_LOGIN)) USU_LOGIN= "''";
            if (string.IsNullOrEmpty(USU_DTINCULSAO)) USU_DTINCULSAO= "''";
            if (string.IsNullOrEmpty(SOLICITANTE_ID)) SOLICITANTE_ID= "''";
            if (string.IsNullOrEmpty(USU_PASS)) USU_PASS= "''";
            if (string.IsNullOrEmpty(USU_ALTERASENHA)) USU_ALTERASENHA= "''";
            if (string.IsNullOrEmpty(USU_EMAIL)) USU_EMAIL= "''";
            if (string.IsNullOrEmpty(USU_STEXCLUIDO)) USU_STEXCLUIDO= "''";

            string sql = "SELECT " +
                                  "USUARIO.USUARIO_ID, " +
                                  "USUARIO.USU_NOME, " +
                                  "USUARIO.USU_LOGIN, " +
                                  "USUARIO.USU_DTINCULSAO, " +
                                  "USUARIO.SOLICITANTE_ID, " +
                                  "USUARIO.USU_PASS, " +
                                  "USUARIO.USU_ALTERASENHA, " +
                                  "USUARIO.USU_EMAIL, " +
                                  "USUARIO.USU_STEXCLUIDO " +
                            "FROM USUARIO " +
                            "LEFT JOIN SOLICITANTE ON SOLICITANTE.SOLICITANTE_ID = USUARIO.SOLICITANTE_ID " +
                            "WHERE " +
                            "      (USUARIO.USUARIO_ID = " + USUARIO_ID+"  OR " + USUARIO_ID + " = '') AND " +
                            "      (USUARIO.USU_NOME = " + USU_NOME+"  OR " + USU_NOME + " = '') AND " +
                            "      (USUARIO.USU_LOGIN = " + USU_LOGIN+"  OR " + USU_LOGIN + " = '') AND " +
                            "      (USUARIO.USU_DTINCULSAO = " + USU_DTINCULSAO+"  OR " + USU_DTINCULSAO + " = '') AND " +
                            "      (USUARIO.SOLICITANTE_ID = " + SOLICITANTE_ID+"  OR " + SOLICITANTE_ID + " = '') AND " +
                            "      (USUARIO.USU_PASS = " + USU_PASS+"  OR " + USU_PASS + " = '') AND " +
                            "      (USUARIO.USU_ALTERASENHA = " + USU_ALTERASENHA+"  OR " + USU_ALTERASENHA + " = '') AND " +
                            "      (USUARIO.USU_EMAIL = " + USU_EMAIL+"  OR " + USU_EMAIL + " = '') AND " +
                            "      (USUARIO.USU_STEXCLUIDO = " + USU_STEXCLUIDO+"  OR " + USU_STEXCLUIDO + " = '') ";

            return sqlServer.retornaDataSet(sql, conectionString);;
            

        }


        public List<ES_Usuario> _obter_Usuario(
                                                string USUARIO_ID,
                                                string USUARIO_TIPO_ID,
                                                string USU_NOME,
                                                string USU_LOGIN,
                                                string USU_DTINCULSAO,
                                                string SOLICITANTE_ID,
                                                string USU_PASS,
                                                string USU_ALTERASENHA,
                                                string USU_EMAIL,
                                                string USU_STEXCLUIDO,
                                                string ORDER_BY_CLAUSE
                                                )
        {

            if (string.IsNullOrEmpty(USUARIO_ID)) USUARIO_ID = "0";
            if (string.IsNullOrEmpty(USUARIO_TIPO_ID)) USUARIO_TIPO_ID = "0";
            if (string.IsNullOrEmpty(USU_NOME)) USU_NOME = "''";  else USU_NOME  = Util.retonarAspas(USU_NOME +"%");
            if (string.IsNullOrEmpty(USU_LOGIN)) USU_LOGIN = "''";  else USU_LOGIN  = Util.retonarAspas(USU_LOGIN +"%");
            if (!string.IsNullOrEmpty(USU_DTINCULSAO)) USU_DTINCULSAO = Util.retonarAspas(Util.formataData(USU_DTINCULSAO, "dd/MM/yyyy"));
            if (string.IsNullOrEmpty(SOLICITANTE_ID)) SOLICITANTE_ID = "0";
            if (string.IsNullOrEmpty(USU_PASS)) USU_PASS = "''";  else USU_PASS  = Util.retonarAspas(USU_PASS +"%");
            if (string.IsNullOrEmpty(USU_ALTERASENHA)) USU_ALTERASENHA = "0";
            if (string.IsNullOrEmpty(USU_EMAIL)) USU_EMAIL = "''";  else USU_EMAIL  = Util.retonarAspas(USU_EMAIL +"%");
            if (string.IsNullOrEmpty(USU_STEXCLUIDO)) USU_STEXCLUIDO = "-1";
            if (string.IsNullOrEmpty(ORDER_BY_CLAUSE)) ORDER_BY_CLAUSE = "USUARIO.USU_NOME ";

            string sql = "SELECT " +
                                  "USUARIO.USUARIO_ID, " +
                                  "USUARIO.USUARIO_TIPO_ID, " +
                                  "USUARIO.USU_NOME, " +
                                  "USUARIO.USU_LOGIN, " +
                                  "USUARIO.USU_DTINCULSAO, " +
                                  "USUARIO.USU_DTALTERACAO, " +
                                  "USUARIO.SOLICITANTE_ID, " +
                                  "DBO.FN_RETORNA_CARACTER (DATALENGTH(USUARIO.USU_PASS),'*') USU_PASS, " +
                                  "USUARIO.USU_ALTERASENHA, " +
                                  "USUARIO.USU_EMAIL, " +
                                  "ISNULL(USUARIO.USU_STEXCLUIDO,0) USU_STEXCLUIDO " +
                            "FROM USUARIO " +
                            "LEFT JOIN SOLICITANTE ON SOLICITANTE.SOLICITANTE_ID = USUARIO.SOLICITANTE_ID " +
                            "WHERE " +
                            "      (USUARIO.USUARIO_ID = " + USUARIO_ID + "  OR " + USUARIO_ID + " = 0) AND " +
                            "      (USUARIO.USUARIO_TIPO_ID = " + USUARIO_TIPO_ID + "  OR " + USUARIO_TIPO_ID + " = 0) AND " +
                            "      (USUARIO.USU_NOME LIKE " + USU_NOME + "  OR " + USU_NOME + " = '') AND " +
                            "      (USUARIO.USU_LOGIN LIKE " + USU_LOGIN + "  OR " + USU_LOGIN + " = '') AND ";

            if (!string.IsNullOrEmpty(USU_DTINCULSAO))
                sql += "      (USUARIO.USU_DTINCULSAO = " + USU_DTINCULSAO + "  OR " + USU_DTINCULSAO + " = '') AND ";

            sql +=
                            "      (USUARIO.SOLICITANTE_ID = " + SOLICITANTE_ID+"  OR " + SOLICITANTE_ID + " = 0) AND " +
                            "      (USUARIO.USU_PASS LIKE " + USU_PASS+"  OR " + USU_PASS + " = '') AND " +
                            "      (USUARIO.USU_ALTERASENHA = " + USU_ALTERASENHA+"  OR " + USU_ALTERASENHA + " = 0) AND " +
                            "      (USUARIO.USU_EMAIL = " + USU_EMAIL+"  OR " + USU_EMAIL + " = '') AND " +
                            "      (ISNULL(USUARIO.USU_STEXCLUIDO,0) = " + USU_STEXCLUIDO+"  OR " + USU_STEXCLUIDO + " = -1) "+
                            "ORDER BY " + ORDER_BY_CLAUSE;

            List<ES_Usuario> lista = new List<ES_Usuario>();
            SqlConnection sqlConexao = new SqlConnection(conectionString);
            SqlDataReader dr = sqlServer.retornaDataReader(sql, conectionString, sqlConexao);
            try
            {
                while (dr.Read())
                {
                    ES_Usuario item = new ES_Usuario();
                    item.USUARIO_ID =  dr["USUARIO_ID"].ToString();
                    item.USUARIO_TIPO_ID = dr["USUARIO_TIPO_ID"].ToString();
                    item.USU_NOME =  dr["USU_NOME"].ToString();
                    item.USU_LOGIN =  dr["USU_LOGIN"].ToString();
                    item.USU_DTINCULSAO =  Util.formataData(dr["USU_DTINCULSAO"].ToString(), "dd/MM/yyyy", true);
                    item.USU_DTALTERACAO = Util.formataData(dr["USU_DTALTERACAO"].ToString(), "dd/MM/yyyy", true);
                    item.SOLICITANTE_ID =  dr["SOLICITANTE_ID"].ToString();
                    item.USU_PASS =  dr["USU_PASS"].ToString();
                    item.USU_ALTERASENHA = (dr["USU_ALTERASENHA"].ToString() == "0") ? false : true;
                    item.USU_EMAIL =  dr["USU_EMAIL"].ToString();
                    item.USU_STEXCLUIDO = (dr["USU_STEXCLUIDO"].ToString() == "0") ? false : true;
                    lista.Add(item);

                }
                return lista;
            }
            finally
            {
                sqlServer.fecharConexao(sqlConexao);
            }
        }


        public ES_Usuario _obter_Usuario_by_id (
                                                string USUARIO_ID, 
                                                string USU_LOGIN,
                                                string USU_PASS
                                                )
        {

            if (string.IsNullOrEmpty(USUARIO_ID)) USUARIO_ID = "0";

            string sql = "SELECT " +
                                  "USUARIO.USUARIO_ID, " +
                                  "USUARIO.USUARIO_TIPO_ID, "+
                                  "USUARIO.USU_NOME, " +
                                  "USUARIO.USU_LOGIN, " +
                                  "USUARIO.USU_DTINCULSAO, " +
                                  "USUARIO.SOLICITANTE_ID, " +
                                  "USUARIO.USU_PASS, " +
                                  "USUARIO.USU_ALTERASENHA, " +
                                  "USUARIO.USU_EMAIL, " +
                                  "USUARIO.USU_STEXCLUIDO " +
                            "FROM USUARIO " +
                            "LEFT JOIN SOLICITANTE ON SOLICITANTE.SOLICITANTE_ID = USUARIO.SOLICITANTE_ID " +
                            "WHERE ";
            if (USUARIO_ID != "0")
                sql += "      (USUARIO.USUARIO_ID = " + USUARIO_ID +") ";
            else
                sql += "      (USUARIO.USU_LOGIN = " + Util.retonarAspas(USU_LOGIN) + " AND USUARIO.USU_PASS = " + Util.retonarAspas(USU_PASS) + " AND ISNULL(USUARIO.USU_STEXCLUIDO,0) = 0) ";  


            ES_Usuario item = new ES_Usuario();
            SqlConnection sqlConexao = new SqlConnection(conectionString);
            SqlDataReader dr = sqlServer.retornaDataReader(sql, conectionString, sqlConexao);
            try
            {
                while (dr.Read())
                {
                    item.USUARIO_ID =  dr["USUARIO_ID"].ToString();
                    item.USUARIO_TIPO_ID = dr["USUARIO_TIPO_ID"].ToString();
                    item.USU_NOME =  dr["USU_NOME"].ToString();
                    item.USU_LOGIN =  dr["USU_LOGIN"].ToString();
                    item.USU_DTINCULSAO =  dr["USU_DTINCULSAO"].ToString();
                    item.SOLICITANTE_ID =  dr["SOLICITANTE_ID"].ToString();
                    item.USU_PASS =  dr["USU_PASS"].ToString();
                    item.USU_ALTERASENHA = (dr["USU_ALTERASENHA"].ToString() == "0") ? false : true;
                    item.USU_EMAIL = dr["USU_EMAIL"].ToString();
                    item.USU_STEXCLUIDO = (dr["USU_STEXCLUIDO"].ToString() == "0") ? false : true;

                }
                return item;
            }
            finally
            {
                sqlServer.fecharConexao(sqlConexao);
            }
        }

        public bool _validar_Usuario(string USU_LOGIN,
                                     string USU_PASS
                                    )
        {
            ES_Usuario item = new ES_Usuario();
            SqlConnection sqlConexao = new SqlConnection(conectionString);

            try
            {
                bool result = false;

                if (string.IsNullOrEmpty(USU_LOGIN) || string.IsNullOrEmpty(USU_PASS))
                    return result;

                string sql = "SELECT " +
                                      "USUARIO.USUARIO_ID, " +
                                      "USUARIO.USUARIO_TIPO_ID, " +
                                      "USUARIO.USU_NOME, " +
                                      "USUARIO.USU_LOGIN, " +
                                      "USUARIO.USU_DTINCULSAO, " +
                                      "USUARIO.SOLICITANTE_ID, " +
                                      "USUARIO.USU_PASS, " +
                                      "USUARIO.USU_ALTERASENHA " +
                                "FROM USUARIO " +
                                "LEFT JOIN SOLICITANTE ON SOLICITANTE.SOLICITANTE_ID = USUARIO.SOLICITANTE_ID " +
                                "WHERE " +
                                "      ISNULL(USUARIO.USU_STEXCLUIDO,0) = 0 AND "+ 
                                "      (USUARIO.USU_LOGIN = " + Util.retonarAspas(USU_LOGIN) + "  AND USUARIO.USU_PASS = " + Util.retonarAspas(USU_PASS) + ") ";



                SqlDataReader dr = sqlServer.retornaDataReader(sql, conectionString, sqlConexao);
                if (dr.HasRows)
                    result = true;

                return result;
            }
            finally
            {
                sqlServer.fecharConexao(sqlConexao);
            }
        }

        public void _inserir_Usuario(   string USUARIO_ID,
                                        string USUARIO_TIPO_ID,
                                        string USU_NOME,
                                        string USU_LOGIN,
                                        string USU_DTINCULSAO,
                                        string USU_DTALTERACAO,
                                        string SOLICITANTE_ID,
                                        string USU_PASS,
                                        bool USU_ALTERASENHA,
                                        string USU_EMAIL,
                                        bool USU_STEXCLUIDO
                                    )
        {

            string sql = " INSERT INTO USUARIO "+
                         "      ( "+
                         "          USUARIO_TIPO_ID, "+
                         "          USU_NOME, " +
                         "          USU_LOGIN, " +
                         "          USU_DTINCULSAO, " +
                         "          SOLICITANTE_ID, " +
                         "          USU_PASS, " +
                         "          USU_ALTERASENHA, " +
                         "          USU_EMAIL, " +
                         "          USU_STEXCLUIDO  " +
                 "      )" +
                 "  VALUES " +
                 "      ( "+
                              Util.retonarNull(USUARIO_TIPO_ID) + ", " +
                              Util.retonarAspas(USU_NOME, true) +", " +
                              Util.retonarAspas(USU_LOGIN, true) +", " +
                              "CURRENT_TIMESTAMP, " +
                              Util.retonarNull(SOLICITANTE_ID) + ", " +
                              Util.retonarAspas(USU_PASS, true) +", " +
                              ((USU_ALTERASENHA == true) ? "1" : "0") + ", " +
                              Util.retonarAspas(USU_EMAIL, true) +", " +
                              ((USU_STEXCLUIDO == true) ? "1" : "0") +
                 "      )";
            try
            {
                sqlServer._ExecutarComandoRetornandoID(sql, conectionString, false, usuario);
            }
            catch
            { }
        }



        public void _atualizar_Usuario( string USUARIO_ID,
                                        string USUARIO_TIPO_ID,                            
                                        string USU_NOME, 
                                        string USU_LOGIN, 
                                        string USU_DTINCULSAO, 
                                        string USU_DTALTERACAO,
                                        string SOLICITANTE_ID, 
                                        string USU_PASS, 
                                        bool USU_ALTERASENHA, 
                                        string USU_EMAIL, 
                                        bool USU_STEXCLUIDO
                                      )
        {

            string sql = " UPDATE USUARIO SET " +
                         "      USUARIO_TIPO_ID = " + Util.retonarNull(USUARIO_TIPO_ID) + ", " +
                         "      USU_NOME = " + Util.retonarAspas(USU_NOME, true) + ", " +
                         "      USU_LOGIN = " + Util.retonarAspas(USU_LOGIN, true) + ", " +
                         "      USU_DTALTERACAO = CURRENT_TIMESTAMP, " +
                         "      SOLICITANTE_ID = " + Util.retonarNull(SOLICITANTE_ID) + ", ";
            
            if (USU_PASS.LastIndexOf("*") < 0)
                sql +=  "      USU_PASS = " + Util.retonarAspas(USU_PASS, true) + ", ";
            
            sql +=
                         "      USU_ALTERASENHA = " + ((USU_ALTERASENHA == true) ? "1" : "0") + ", " +
                         "      USU_EMAIL = " + Util.retonarAspas(USU_EMAIL, true) +", " +
                         "      USU_STEXCLUIDO = " + ((USU_STEXCLUIDO == true) ? "1" : "0") +
                         " WHERE USUARIO_ID =  " + USUARIO_ID;
            try
            {
                sqlServer._ExecutarComandoRetornandoID(sql, conectionString, false, usuario);
            }
            catch
            { }
        }

        public void _atualizar_Usuario_AlterarSenha(string USUARIO_ID,                                                                                
                                                    string USU_PASS
                                                    )
        {

            string sql = " UPDATE USUARIO SET " +                         
                         "      USU_DTALTERACAO = CURRENT_TIMESTAMP, " +
                         "      USU_PASS = " + Util.retonarAspas(USU_PASS, true) + ", "+
                         "      USU_ALTERASENHA = 0 " +                         
                         " WHERE USUARIO_ID =  " + USUARIO_ID;
            try
            {
                sqlServer._ExecutarComandoRetornandoID(sql, conectionString, false, usuario);
            }
            catch
            { }
        }

        public void _excluir_Usuario(string USUARIO_ID)
        {
            string sql = "DELETE FROM USUARIO WHERE USUARIO_ID = " + USUARIO_ID;
            try
            {
                sqlServer._ExecutarComandoRetornandoID(sql, conectionString, false, usuario);
            }
            catch
            { }
        }



        #endregion
    }
}